package com.woniuxy.utils;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;

public class JWTUtils {
    //设置token默认过期时间 5分钟
    public static final long EXPERING_TIME = 50 * 60 * 1000;

    /*
     * 用来生成token字符串，
     * username：同来存Claim自定义属性中，密码切记不要放进去，因为jwt中的body是明文
     * password：woniuxy的签名
     *
     * */
    public static String sign(String username, String password) {
        //通过算法增加解密难度，
        Algorithm algorithm = Algorithm.HMAC256(password);
        //配置一个过期时间
        Date expering_time = new Date(System.currentTimeMillis() + EXPERING_TIME);
        String token = JWT.create().withClaim("username", username)
                .withSubject(username)
                //过期时间
                .withExpiresAt(expering_time)
                .sign(algorithm);
        return token;
    }

    public static boolean verify(String token, String username, String password) {
        //通过签名算法，增加解密难度
        Algorithm algorithm = Algorithm.HMAC256(password);
        //重新计算加密比窘老进行校验两个token是否一样
        JWTVerifier jwtVerifier=JWT.require(algorithm)
        .withClaim("username",username)
                .withSubject(username).build();
        jwtVerifier.verify(token);
        return true;
    }


    public static String getUsername(String token){
        DecodedJWT decode=JWT.decode(token);
        /*还可以用这个来获取用户名
        *decode.getSubject();
        *  */
        return decode.getSubject();
    }
}
